package com.bdqn.ch01.Sl;

import java.lang.reflect.Modifier;

/**
 * GetClassInfo
 * 示例2
 * @aurhor Administrator  whs
 * @since 2024/6/26
 */
public class GetClassInfo {
    /**
     *
     * @param args
     */
    public static void main(String[] args) {

        Class clz = Person.class ;  //获取Class实例
        String fullName = clz.getName() ;  // 得到类的完全限定名称 （包名加+类名）
        String simpleName = clz.getSimpleName() ; // 得到类名
        System.out.println("以下是 "+fullName+" 类的基本信息");  // com.bdqn.ch01.Sl.Person
        System.out.println("---------------------------");

        // 获取Person类所在的包
        Package pkg = clz.getPackage() ; // 得到包类
        System.out.println(simpleName+" 定义在 "+ pkg.getName()+ " 包中"); // Person 定义在 com.bdqn.ch01.Sl 包中
        System.out.println("---------------------------");

        Class superClass = clz.getSuperclass();  // 父类
        System.out.println( simpleName  + " 类的超类是：" +superClass.getName());  // Person 类的超类是：com.bdqn.ch01.Sl.BaseClass
        System.out.println("---------------------------");

        Class[] interfaces = clz.getInterfaces(); // 实现类的接口
        System.out.println(simpleName  +  "类所实现的接口： ");  // Person类所实现的接口：  java.io.Serializable
        for (Class i : interfaces) {
            System.out.println("\t"+i.getName());
        }
        System.out.println("---------------------------");

        int modifiers = clz.getModifiers(); // 获取 Person 类的实例的访问修饰符
        System.out.println(simpleName  +  " 类的实例的访问修饰符： ");
        if ((modifiers & Modifier.PUBLIC) == Modifier.PUBLIC){
            System.out.println("\t访问修饰符是： public");
        }else {
            System.out.println("\t访问修饰符是： default(package)");
        }
        if ((modifiers & Modifier.FINAL) == Modifier.FINAL){
            System.out.println("\t这个类是： final 的");
        }
        if ((modifiers & Modifier.ABSTRACT) == Modifier.ABSTRACT){
            System.out.println("\t 这是一个抽象类 ");
        }
        if ((modifiers & Modifier.INTERFACE) == Modifier.INTERFACE){
            System.out.println("\t 这是一个接口");
        }
        System.out.println("---------------------------");

//        Person 类的实例的访问修饰符：
//        访问修饰符是： public
//        这个类是： final 的

    }
}
